home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
ABUSESRC.ZIP
/
AbuseSrc
/
macabuse
/
imlib
/
loader.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-05-20
|
4KB
|
150 lines
#include "loader.hpp"
#include "image.hpp"
#include "palette.hpp"
#include "mdlread.hpp"
#include "ppmread.hpp"
#include "xwdread.hpp"
#include "glread.hpp"
#include "pcxread.hpp"
#include "lbmread.hpp"
int tell_color_size(char *filename)
{
if (bmp_bits(filename)==24) return 24;
if (PCX_file_type(filename)==PCX_24) return 24;
clear_errors();
return 8;
}
image24 *load_any24(char *filename)
{
if (bmp_bits(filename)==24)
return read_bmp24(filename);
else if (PCX_file_type(filename)==PCX_24)
return read_PCX24(filename);
else return NULL;
}
// if total_read returned<0 then, this function returns a error message number
short load_any(char *filename, image **&images, palette *&pal, short &total_read)
{
pal=NULL; images=NULL; total_read=0;
switch (tell_file_type(filename))
{
case LOADER_not_supported : break;
case LOADER_mdl :
total_read=mdl_total_images(filename);
if (!current_error())
images=read_mdl(filename,pal,1,total_read,total_read);
break;
case LOADER_xwd :
images=(image **)jmalloc(sizeof(image *),"loader::xwd image * array");
total_read=1;
images[0]=readxwd(filename,pal);
break;
case LOADER_ppm :
images=(image **)jmalloc(sizeof(image *),"loader::ppm image * array");
total_read=1;
pal=new palette;
images[0]=read_ppm(filename,pal,PPM_REG);
break;
case LOADER_pic :
images=(image **)jmalloc(sizeof(image *),"loader::pic image * array");
total_read=1;
pal=NULL;
images[0]=read_pic(filename,pal);
break;
case LOADER_bmp8 :
images=(image **)jmalloc(sizeof(image *),"loader::bmp image * array");
total_read=1;
pal=NULL;
images[0]=read_bmp(pal,filename);
break;
case LOADER_pcx8 :
images=(image **)jmalloc(sizeof(image *),"loader::pcx image * array");
total_read=1;
pal=NULL;
images[0]=read_PCX(filename,pal);
break;
case LOADER_lbm :
images=(image **)jmalloc(sizeof(image *),"loader::pcx image * array");
total_read=1;
pal=NULL;
images[0]=read_lbm(filename,pal);
break;
default :
set_error(imNOT_SUPPORTED);
}
if (current_error())
{
short i;
i=current_error();
set_error(0);
return i;
}
return 0;
}
graphics_type tell_file_type(char *filename)
{
FILE *fp;
unsigned char header[10];
fp=fopen(filename,"rb");
if (!fp)
return LOADER_not_supported;
else if (fread(header,1,12,fp)!=12)
{
fclose(fp);
return LOADER_not_supported;
}
fclose(fp);
if (header[0]=='J' && header[1]=='C'
&& header[2]=='2' && header[3]=='0')
return LOADER_mdl;
else if (header[4]==0 && header[5]==0 && header[6]==0 &&
header[7]==7)
return LOADER_xwd;
else if (header[0]=='P' && header[1]=='6')
return LOADER_ppm;
else if (header[10]==8 && header[11]==0xff)
return LOADER_pic;
else if (header[0]=='F' && header[1]=='O' && header[2]=='R' && header[3]=='M')
return LOADER_lbm;
else if (header[0]=='B' && header[1]=='M')
{
switch (tell_color_size(filename))
{
case 24 : return LOADER_bmp24; break;
case 8 : return LOADER_bmp8; break;
default : return LOADER_not_supported; break;
}
} else if (header[0]==10)
{
switch (tell_color_size(filename))
{
case 24 : return LOADER_pcx24; break;
case 8 : return LOADER_pcx8; break;
default : return LOADER_not_supported; break;
}
}
return LOADER_not_supported;
}